def jsonlang_to_lisp(json_obj):
    """将 JSONLang 转换回 Lisp S-表达式"""
    if isinstance(json_obj, (int, float, str, bool)) or json_obj is None:
        return json_obj  # 原子值直接返回
    elif isinstance(json_obj, dict):
        if "let" in json_obj:
            # 处理 {"let": [{"var":x, "value":v}], "body": body}
            bindings = [(binding["var"], jsonlang_to_lisp(binding["value"]))
                       for binding in json_obj["let"]]
            body = jsonlang_to_lisp(json_obj["body"])
            return ['let', bindings, body]
        elif "lambda" in json_obj:
            # 处理 {"lambda": {"params": [...], "body": body}}
            return ['lambda', json_obj["lambda"]["params"], 
                    jsonlang_to_lisp(json_obj["lambda"]["body"])]
        elif "if" in json_obj:
            # 处理 {"if": {"condition":..., "then":..., "else":...}}
            return ['if',
                    jsonlang_to_lisp(json_obj["if"]["condition"]),
                    jsonlang_to_lisp(json_obj["if"]["then"]),
                    jsonlang_to_lisp(json_obj["if"]["else"])]
        elif "define" in json_obj:
            # 处理 {"define": {"name":..., "params":..., "body":...}}
            return ['define', 
                    [json_obj["define"]["name"]] + json_obj["define"]["params"],
                    jsonlang_to_lisp(json_obj["define"]["body"])]
        elif "quote" in json_obj:
            # 处理 {"quote": ...}
            return ['quote', jsonlang_to_lisp(json_obj["quote"])]
        else:
            # 普通函数调用 {"func": [arg1, arg2]}
            func = next(iter(json_obj))
            args = [jsonlang_to_lisp(arg) for arg in json_obj[func]]
            return [func] + args
    else:
        raise ValueError(f"Unknown JSONLang object: {json_obj}")

# 示例：转换 JSONLang 回 Lisp
jsonlang_code = {
  "define": {
    "name": "factorial",
    "params": ["n"],
    "body": {
      "if": {
        "condition": {"<=": ["n", 1]},
        "then": 1,
        "else": {"*": ["n", {"factorial": {"-": ["n", 1]}}]}
      }
    }
  }
}
lisp_code = jsonlang_to_lisp(jsonlang_code)
print(lisp_code)  # 输出: ['define', ['factorial', 'n'], ['if', ['<=', 'n', 1], 1, ['*', 'n', ['factorial', ['-', 'n', 1]]]]]
